//package com.jiuhao.util;
//
//
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import org.elasticsearch.action.index.IndexRequest;
//import org.elasticsearch.action.search.SearchRequest;
//import org.elasticsearch.search.builder.SearchSourceBuilder;
//import org.elasticsearch.action.update.UpdateRequest;
//import org.elasticsearch.common.xcontent.XContentHelper;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.util.Map;
//
//@Component
//public class ElasticsearchDslLogger {
//
//    private static final Logger logger = LoggerFactory.getLogger(ElasticsearchDslLogger.class);
//
//    @Autowired
//    private ObjectMapper objectMapper;
//
//    /**
//     * 打印索引操作的DSL
//     */
//    public void logIndexDsl(IndexRequest request) {
//        try {
//            // 构建请求行
//            StringBuilder dsl = new StringBuilder();
//            dsl.append("PUT ")
//                    .append(request.index())
//                    .append("/_doc/")
//                    .append(request.id() != null ? request.id() : "")
//                    .append("\n");
//
//            // 解析并格式化文档内容
//            Map<String, Object> sourceMap = XContentHelper.convertToMap(request.source(), true, request.getXContentType()).v2();
//            String formattedSource = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(sourceMap);
//            dsl.append(formattedSource);
//
//            logger.info("Elasticsearch Index DSL:\n{}", dsl);
//        } catch (IOException e) {
//            logger.error("Failed to log index DSL", e);
//        }
//    }
//
//    /**
//     * 打印查询操作的DSL
//     */
//    public void logSearchDsl(SearchRequest request) {
//        try {
//            // 构建请求行
//            StringBuilder dsl = new StringBuilder();
//            dsl.append("GET ")
//                    .append(String.join(",", request.indices()))
//                    .append("/_search\n");
//
//            // 格式化查询条件
//            SearchSourceBuilder sourceBuilder = request.source();
//            String formattedQuery = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(sourceBuilder);
//            dsl.append(formattedQuery);
//
//            logger.info("Elasticsearch Search DSL:\n{}", dsl);
//        } catch (JsonProcessingException e) {
//            logger.error("Failed to log search DSL", e);
//        }
//    }
//
//    /**
//     * 打印更新操作的DSL
//     */
//    public void logUpdateDsl(UpdateRequest request) {
//        try {
//            // 构建请求行
//            StringBuilder dsl = new StringBuilder();
//            dsl.append("POST ")
//                    .append(request.index())
//                    .append("/_update/")
//                    .append(request.id())
//                    .append("\n");
//
//            // 解析并格式化更新内容
//            Map<String, Object> docMap = XContentHelper.convertToMap(request.doc(), true, request.doc().getContentType()).v2();
//            String formattedDoc = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(Map.of("doc", docMap));
//            dsl.append(formattedDoc);
//
//            logger.info("Elasticsearch Update DSL:\n{}", dsl);
//        } catch (IOException e) {
//            logger.error("Failed to log update DSL", e);
//        }
//    }
//}
//
